// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.google.gson; import com.google.gson.internal.ConstructorConstructor; import com.google.gson.internal.Excluder; import com.google.gson.internal.Primitives; import com.google.gson.internal.Streams; import com.google.gson.internal.bind.ArrayTypeAdapter; import com.google.gson.internal.bind.CollectionTypeAdapterFactory; import com.google.gson.internal.bind.DateTypeAdapter; import com.google.gson.internal.bind.JsonTreeReader; import com.google.gson.internal.bind.JsonTreeWriter; import com.google.gson.internal.bind.MapTypeAdapterFactory; import com.google.gson.internal.bind.ObjectTypeAdapter; import com.google.gson.internal.bind.ReflectiveTypeAdapterFactory; import com.google.gson.internal.bind.SqlDateTypeAdapter; import com.google.gson.internal.bind.TimeTypeAdapter; import com.google.gson.internal.bind.TypeAdapters; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import com.google.gson.stream.MalformedJsonException; import java.io.EOFException; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.lang.reflect.Type; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; // Referenced classes of package com.google.gson: // FieldNamingPolicy, LongSerializationPolicy, g, h, // k, i, JsonIOException, JsonSyntaxException, // j, TypeAdapter, l, TypeAdapterFactory, // JsonNull, JsonDeserializationContext, JsonSerializationContext, FieldNamingStrategy, // JsonElement public final class Gson { static final boolean a = false; private static final String d = ")]}'\n"; final JsonDeserializationContext b; final JsonSerializationContext c; private final ThreadLocal e; private final Map f; private final List g; private final ConstructorConstructor h; private final boolean i; private final boolean j; private final boolean k; private final boolean l; public Gson() { this(Excluder.DEFAULT, ((FieldNamingStrategy) (FieldNamingPolicy.IDENTITY)), Collections.emptyMap(), false, false, false, true, false, false, LongSerializationPolicy.DEFAULT, Collections.emptyList()); } Gson(Excluder excluder, FieldNamingStrategy fieldnamingstrategy, Map map, boolean flag, boolean flag1, boolean flag2, boolean flag3, boolean flag4, boolean flag5, LongSerializationPolicy longserializationpolicy, List list) { e = new ThreadLocal(); f = Collections.synchronizedMap(new HashMap()); b = new g(this); c = new h(this); h = new ConstructorConstructor(map); i = flag; k = flag2; j = flag3; l = flag4; ArrayList arraylist = new ArrayList(); arraylist.add(TypeAdapters.JSON_ELEMENT_FACTORY); arraylist.add(ObjectTypeAdapter.FACTORY); arraylist.add(excluder); arraylist.addAll(list); arraylist.add(TypeAdapters.STRING_FACTORY); arraylist.add(TypeAdapters.INTEGER_FACTORY); arraylist.add(TypeAdapters.BOOLEAN_FACTORY); arraylist.add(TypeAdapters.BYTE_FACTORY); arraylist.add(TypeAdapters.SHORT_FACTORY); arraylist.add(TypeAdapters.newFactory(Long.TYPE, java/lang/Long, a(longserializationpolicy))); arraylist.add(TypeAdapters.newFactory(Double.TYPE, java/lang/Double, a(flag5))); arraylist.add(TypeAdapters.newFactory(Float.TYPE, java/lang/Float, b(flag5))); arraylist.add(TypeAdapters.NUMBER_FACTORY); arraylist.add(TypeAdapters.CHARACTER_FACTORY); arraylist.add(TypeAdapters.STRING_BUILDER_FACTORY); arraylist.add(TypeAdapters.STRING_BUFFER_FACTORY); arraylist.add(TypeAdapters.newFactory(java/math/BigDecimal, TypeAdapters.BIG_DECIMAL)); arraylist.add(TypeAdapters.newFactory(java/math/BigInteger, TypeAdapters.BIG_INTEGER)); arraylist.add(TypeAdapters.URL_FACTORY); arraylist.add(TypeAdapters.URI_FACTORY); arraylist.add(TypeAdapters.UUID_FACTORY); arraylist.add(TypeAdapters.LOCALE_FACTORY); arraylist.add(TypeAdapters.INET_ADDRESS_FACTORY); arraylist.add(TypeAdapters.BIT_SET_FACTORY); arraylist.add(DateTypeAdapter.FACTORY); arraylist.add(TypeAdapters.CALENDAR_FACTORY); arraylist.add(TimeTypeAdapter.FACTORY); arraylist.add(SqlDateTypeAdapter.FACTORY); arraylist.add(TypeAdapters.TIMESTAMP_FACTORY); arraylist.add(ArrayTypeAdapter.FACTORY); arraylist.add(TypeAdapters.ENUM_FACTORY); arraylist.add(TypeAdapters.CLASS_FACTORY); arraylist.add(new CollectionTypeAdapterFactory(h)); arraylist.add(new MapTypeAdapterFactory(h, flag1)); arraylist.add(new ReflectiveTypeAdapterFactory(h, fieldnamingstrategy, excluder)); g = Collections.unmodifiableList(arraylist); } private TypeAdapter a(LongSerializationPolicy longserializationpolicy) { if (longserializationpolicy == LongSerializationPolicy.DEFAULT) { return TypeAdapters.LONG; } else { return new k(this); } } private TypeAdapter a(boolean flag) { if (flag) { return TypeAdapters.DOUBLE; } else { return new i(this); } } private JsonWriter a(Writer writer) { if (k) { writer.write(")]}'\n"); } JsonWriter jsonwriter = new JsonWriter(writer); if (l) { jsonwriter.setIndent(" "); } jsonwriter.setSerializeNulls(i); return jsonwriter; } private void a(double d1) { if (Double.isNaN(d1) || Double.isInfinite(d1)) { throw new IllegalArgumentException((new StringBuilder()).append(d1).append(" is not a valid double value as per JSON specification. To override this").append(" behavior, use GsonBuilder.serializeSpecialFloatingPointValues() method.").toString()); } else { return; } } static void a(Gson gson, double d1) { gson.a(d1); } private static void a(Object obj, JsonReader jsonreader) { if (obj != null) { try { if (jsonreader.peek() != JsonToken.END_DOCUMENT) { throw new JsonIOException("JSON document was not fully consumed."); } } catch (MalformedJsonException malformedjsonexception) { throw new JsonSyntaxException(malformedjsonexception); } catch (IOException ioexception) { throw new JsonIOException(ioexception); } } } private TypeAdapter b(boolean flag) { if (flag) { return TypeAdapters.FLOAT; } else { return new j(this); } } public Object fromJson(JsonElement jsonelement, Class class1) { Object obj = fromJson(jsonelement, ((Type) (class1))); return Primitives.wrap(class1).cast(obj); } public Object fromJson(JsonElement jsonelement, Type type) { if (jsonelement == null) { return null; } else { return fromJson(((JsonReader) (new JsonTreeReader(jsonelement))), type); } } public Object fromJson(JsonReader jsonreader, Type type) { boolean flag; boolean flag1; flag = true; flag1 = jsonreader.isLenient(); jsonreader.setLenient(flag); jsonreader.peek(); flag = false; Object obj = getAdapter(TypeToken.get(type)).read(jsonreader); jsonreader.setLenient(flag1); return obj; EOFException eofexception; eofexception; if (flag) { jsonreader.setLenient(flag1); return null; } throw new JsonSyntaxException(eofexception); Exception exception; exception; jsonreader.setLenient(flag1); throw exception; IllegalStateException illegalstateexception; illegalstateexception; throw new JsonSyntaxException(illegalstateexception); IOException ioexception; ioexception; throw new JsonSyntaxException(ioexception); } public Object fromJson(Reader reader, Class class1) { JsonReader jsonreader = new JsonReader(reader); Object obj = fromJson(jsonreader, ((Type) (class1))); a(obj, jsonreader); return Primitives.wrap(class1).cast(obj); } public Object fromJson(Reader reader, Type type) { JsonReader jsonreader = new JsonReader(reader); Object obj = fromJson(jsonreader, type); a(obj, jsonreader); return obj; } public Object fromJson(String s, Class class1) { Object obj = fromJson(s, ((Type) (class1))); return Primitives.wrap(class1).cast(obj); } public Object fromJson(String s, Type type) { if (s == null) { return null; } else { return fromJson(((Reader) (new StringReader(s))), type); } } public TypeAdapter getAdapter(TypeToken typetoken) { Object obj = (TypeAdapter)f.get(typetoken); if (obj == null) goto _L2; else goto _L1 _L1: return ((TypeAdapter) (obj)); _L2: Map map = (Map)e.get(); Object obj1; boolean flag; l l1; Exception exception; Iterator iterator; if (map == null) { HashMap hashmap = new HashMap(); e.set(hashmap); obj1 = hashmap; flag = true; } else { obj1 = map; flag = false; } obj = (l)((Map) (obj1)).get(typetoken); if (obj != null) goto _L1; else goto _L3 _L3: l1 = new l(); ((Map) (obj1)).put(typetoken, l1); iterator = g.iterator(); do { if (!iterator.hasNext()) { break MISSING_BLOCK_LABEL_180; } obj = ((TypeAdapterFactory)iterator.next()).create(this, typetoken); } while (obj == null); l1.a(((TypeAdapter) (obj))); f.put(typetoken, obj); ((Map) (obj1)).remove(typetoken); if (!flag) goto _L1; else goto _L4 _L4: e.remove(); return ((TypeAdapter) (obj)); throw new IllegalArgumentException((new StringBuilder()).append("GSON cannot handle ").append(typetoken).toString()); exception; ((Map) (obj1)).remove(typetoken); if (flag) { e.remove(); } throw exception; } public TypeAdapter getAdapter(Class class1) { return getAdapter(TypeToken.get(class1)); } public TypeAdapter getDelegateAdapter(TypeAdapterFactory typeadapterfactory, TypeToken typetoken) { Iterator iterator = g.iterator(); boolean flag = false; while (iterator.hasNext()) { TypeAdapterFactory typeadapterfactory1 = (TypeAdapterFactory)iterator.next(); if (!flag) { if (typeadapterfactory1 == typeadapterfactory) { flag = true; } } else { TypeAdapter typeadapter = typeadapterfactory1.create(this, typetoken); if (typeadapter != null) { return typeadapter; } } } throw new IllegalArgumentException((new StringBuilder()).append("GSON cannot serialize ").append(typetoken).toString()); } public String toJson(JsonElement jsonelement) { StringWriter stringwriter = new StringWriter(); toJson(jsonelement, ((Appendable) (stringwriter))); return stringwriter.toString(); } public String toJson(Object obj) { if (obj == null) { return toJson(((JsonElement) (JsonNull.INSTANCE))); } else { return toJson(obj, ((Type) (obj.getClass()))); } } public String toJson(Object obj, Type type) { StringWriter stringwriter = new StringWriter(); toJson(obj, type, ((Appendable) (stringwriter))); return stringwriter.toString(); } public void toJson(JsonElement jsonelement, JsonWriter jsonwriter) { boolean flag; boolean flag1; boolean flag2; flag = jsonwriter.isLenient(); jsonwriter.setLenient(true); flag1 = jsonwriter.isHtmlSafe(); jsonwriter.setHtmlSafe(j); flag2 = jsonwriter.getSerializeNulls(); jsonwriter.setSerializeNulls(i); Streams.write(jsonelement, jsonwriter); jsonwriter.setLenient(flag); jsonwriter.setHtmlSafe(flag1); jsonwriter.setSerializeNulls(flag2); return; IOException ioexception; ioexception; throw new JsonIOException(ioexception); Exception exception; exception; jsonwriter.setLenient(flag); jsonwriter.setHtmlSafe(flag1); jsonwriter.setSerializeNulls(flag2); throw exception; } public void toJson(JsonElement jsonelement, Appendable appendable) { try { toJson(jsonelement, a(Streams.writerForAppendable(appendable))); return; } catch (IOException ioexception) { throw new RuntimeException(ioexception); } } public void toJson(Object obj, Appendable appendable) { if (obj != null) { toJson(obj, ((Type) (obj.getClass())), appendable); return; } else { toJson(((JsonElement) (JsonNull.INSTANCE)), appendable); return; } } public void toJson(Object obj, Type type, JsonWriter jsonwriter) { TypeAdapter typeadapter; boolean flag; boolean flag1; boolean flag2; typeadapter = getAdapter(TypeToken.get(type)); flag = jsonwriter.isLenient(); jsonwriter.setLenient(true); flag1 = jsonwriter.isHtmlSafe(); jsonwriter.setHtmlSafe(j); flag2 = jsonwriter.getSerializeNulls(); jsonwriter.setSerializeNulls(i); typeadapter.write(jsonwriter, obj); jsonwriter.setLenient(flag); jsonwriter.setHtmlSafe(flag1); jsonwriter.setSerializeNulls(flag2); return; IOException ioexception; ioexception; throw new JsonIOException(ioexception); Exception exception; exception; jsonwriter.setLenient(flag); jsonwriter.setHtmlSafe(flag1); jsonwriter.setSerializeNulls(flag2); throw exception; } public void toJson(Object obj, Type type, Appendable appendable) { try { toJson(obj, type, a(Streams.writerForAppendable(appendable))); return; } catch (IOException ioexception) { throw new JsonIOException(ioexception); } } public JsonElement toJsonTree(Object obj) { if (obj == null) { return JsonNull.INSTANCE; } else { return toJsonTree(obj, ((Type) (obj.getClass()))); } } public JsonElement toJsonTree(Object obj, Type type) { JsonTreeWriter jsontreewriter = new JsonTreeWriter(); toJson(obj, type, jsontreewriter); return jsontreewriter.get(); } public String toString() { return (new StringBuilder("{serializeNulls:")).append(i).append("factories:").append(g).append(",instanceCreators:").append(h).append("}").toString(); } }